A.2.1 为Docker daemon配置TLS

启动daemon安全模式,只需在daemon.json配置文件中增加几个守护参数即可。

  • tlsverify :开启TLS认证。
  • tlscacert :指定daemon可信任的CA。
  • tlscert :向Docker指定daemon证书的位置。
  • tlskey :向Docker指定daemon私钥的位置。
  • hosts :向Docker指定需要绑定daemon的具体Socket。

上述内容配置在与平台无关的 daemon.json 配置文件当中。在Linux上位于 /etc/docker ,在Windows上位于 C:\ProgramData\Docker\config\

在Docker安全daemon节点上执行下面的全部操作(在示例环境中是 node3 )。

编辑 daemon.json 文件,并添加如下行。

{
  "hosts": ["tcp://node3:2376"],
  "tls": true,
  "tlsverify": true,
  "tlscacert": "/home/ubuntu/.docker/ca.pem",
  "tlscert": "/home/ubuntu/.docker/cert.pem",
  "tlskey": "/home/ubuntu/.docker/key.pem"
}

警告:

运行 systemd 的Linux系统不允许在 daemon.json 中使用“hosts”选项。替换方案是在systemd配置文件中进行重写。最简单的方式是通过 sudo systemdctl edit docker 命令进行修改。该命令会在编辑器中打开名为 /etc/systemd/system/docker.service.d/override.conf 的新文件。在其中加入下列3行内容,然后保存。

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -H tcp://node3:2376

现在TLS和主机选型都设置完成,是时候重启Docker了。

一旦Docker重启完成,可以使用 ps 命令,根据其输出内容检查新的 hosts 值是否生效。

$ ps -elf | grep dockerd
4 S root ... /usr/bin/dockerd -H tcp://node3:2376

输出内容中如果有“ -H tcp://node3:2376 ”,则可以证明daemon正在监听网络。端口 2376 是Docker TLS使用的标准端口。 2375 默认是非安全端口。

如果运行的是普通命令,会出现无法工作的情况,如 docker version 。这是因为刚才配置了daemon监听网络,但是Docker客户端仍尝试使用本地IPC Socket。加上 -H tcp://node3:2376 参数后再次运行该命令。

$ docker -H tcp://node3:2376 version
Client:
 Version:       18.01.0-ce
 API version:   1.35
<Snip>
Get http://daemon:2376/v1.35/version: net/http: HTTP/1.x transport connectio\
n broken: malformed HTTP response "\x15\x03\x01\x00\x02\x02".
* Are you trying to connect to a TLS-enabled daemon without TLS?

命令看起来没什么问题,但是仍然不工作。这是因为daemon拒绝了来自未认证客户端的连接。

恭喜。Docker daemon已经配置为监听网络,并且拒绝了来自未认证客户端的连接。

接下来配置 node1 节点上的Docker client使用TLS。

results matching ""

    No results matching ""